/**
 * @author LKQ
 * @date 2021/12/25 21:38
 * @description
 */
public class Solution2 {
    public static void main(String[] args) {
        Solution2 solution2 = new Solution2();
        solution2.convert("PAYPALISHIRING", 3);
    }

    public String convert(String s, int numRows) {

        if (numRows == 1) {
            return s;
        }

        StringBuilder ret = new StringBuilder();
        int n = s.length();
        // 周期 t = 2 * numRows - 2, 每个周期占用 numRows - 1列。
        int cycleLen = 2 * numRows - 2;

        for (int i = 0; i < numRows; i++) {
            // 枚举矩阵的行
            for (int j = 0; j + i < n; j += cycleLen) {
                // 枚举每个周期的起始下标
                ret.append(s.charAt(j + i));
                if (i != 0 && i != numRows - 1 && j + cycleLen - i < n) {
                    // 当前周期的第二个字符
                    ret.append(s.charAt(j + cycleLen - i));
                }
            }
        }
        return ret.toString();
    }
}
